#!/usr/bin/env node

/* TODO:

定义一个 user 对象，包含三个字段：name（字符串）, age（整数）, qq（字符串）
使用六种占位符，分别输出四种变量类型：字符串、整数（两种）、浮点数和对象（两种）
使用四种不同的方式输出字符串信息
用 console 的 dir 方法输出对象和对象的数组
用 console 的 dir 方法输出层次较深的对象
用 console 的 table 方法输出对象和对象的数组，观察 index 列的区别
用 console 的 table 方法输出对象数组的某些字段
向标准错误流中输出信息：Error：something wrong!
通过命令行重定向，观察 console 的 log 和 error 两个方法所使用流的区别
*/ 

const user = {
  name: 'xili',
  age:  100,
  qq:   '0289389'
};

const log = console.log;

// 占位符
log('name: %s', user.name);   // 字符串类型
log('age: %d', user.age);     // 整数类型
log('num: %i', 45);           // 整数类型
log('PI:  %f', 3.14);         // 浮点数
log('JSON: %j', user);        // 对象类型
log('Object: %o', user);      // 对象类型


log('qq: %s', user.qq);       // 输出方式一：占位符输出
log('qq:', user.qq);          // 输出方式二：逗号间隔，多变量输出
log('qq: ' + user.qq);        // 输出方式三：拼接字符串输出
log(`qq: ${user.qq}`);        // 输出方式四：模板字符串输出

//console.dir(obj[,options])
/* options:showHidden,depth(null无限递归)，colors */
console.dir(user);
console.dir([user, user]);
console.dir({o: {b: {j: user}}});
console.dir({o: {b: {j: user}}}, {depth: null});//无限递归...

/* 对象：index列存其键，其对应行存其值
对象数组：index为每一个对象的下标，为将所有信息打印出来，对象的键以行头的形式，其对应列保有其（哪个对象）的值。你可以通过['']查询你感兴趣的字段（键） 适合打印数据库的查询数据*/
console.table(user);
console.table([user, user, user]);

console.table([user, user, user], ['name', 'qq']);


console.error('Error! something wrong!');


/* ./01-format.js 1> output.txt
./01-format.js 2> error-msg.txt */

/* 前者使用的是是标准输出流，后者则为stderr通过linux的命令行重定向区分出来 */













/* console.table的任务闯关


const me={
  name:'xili',
  age:19,
  phone:'13369167781'
}
const people=[
  {name:1,food:2},{name:3,wel:6},
  {fair:3}
]
console.table(me)
console.table(people,['name'])
console.table('xi') */

//%s占位符,%d数字%i，%f:Π %j%o对象
// log('name: %s',me.name)
// log('age %d',me.age)//digital
// log('num %i',12) //integer
// log('qq %s',me.qq)
// log('user: %j',me) //json ——字符串的形式哈
// log('me: %o',me)//object


// log('name: %s',me.name)
// log('name: ',me.name)
// log('name:'+me.name)
// log(`name: %s' ${me.name}`)